package com.xinke.module.system.service.oauth2;

import java.util.*;
import javax.validation.*;

import com.xinke.module.system.model.entity.oauth2.OAuth2ClientDO;
import com.xinke.module.system.model.vo.oauth2.*;
import com.xinke.module.system.model.entity.oauth2.OAuth2RefreshTokenDO;
import com.xinke.component.common.pojo.PageResult;

/**
 * OAuth2 刷新令牌 Service 接口
 *
 * @author yzx
 */
public interface OAuth2RefreshTokenService {

    /**
     * 创建OAuth2 刷新令牌
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOAuth2RefreshToken(@Valid OAuth2RefreshTokenSaveReqVO createReqVO);

    /**
     * 创建OAuth2 刷新令牌
     * @param userId
     * @param userType
     * @param clientDO
     * @param scopes
     * @return
     */
    OAuth2RefreshTokenDO createOAuth2RefreshToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List<String> scopes);
    /**
     * 更新OAuth2 刷新令牌
     *
     * @param updateReqVO 更新信息
     */
    void updateOAuth2RefreshToken(@Valid OAuth2RefreshTokenSaveReqVO updateReqVO);

    /**
     * 删除OAuth2 刷新令牌
     *
     * @param refreshId 编号
     */
    void deleteOAuth2RefreshToken(Long refreshId);

    /**
     * 获得OAuth2 刷新令牌
     *
     * @param refreshId 编号
     * @return OAuth2 刷新令牌
     */
    OAuth2RefreshTokenDO getOAuth2RefreshToken(Long refreshId);

    /**
     * 获得OAuth2 刷新令牌分页
     *
     * @param pageReqVO 分页查询
     * @return OAuth2 刷新令牌分页
     */
    PageResult<OAuth2RefreshTokenDO> getOAuth2RefreshTokenPage(OAuth2RefreshTokenPageReqVO pageReqVO);

}